home *** CD-ROM | disk | FTP | other *** search
- Path: news.larc.nasa.gov!amiga-request
- From: amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
- Subject: v91i060: Lightpenhandler 1.1 - use a lightpen like a mouse, Part01/01
- Reply-To: akk%trantor.informatik.uni-erlangen.de@taurus.cs.nps.navy.mil (Andy Klingler)
- Newsgroups: comp.sources.amiga
- Message-ID: <comp.sources.amiga:v91i060@ab20.larc.nasa.gov>
- Date: 14 Mar 91 01:25:08 GMT
- Approved: tadguy@uunet.UU.NET (Tad Guy)
- X-Mail-Submissions-To: amiga@uunet.uu.net
- X-Post-Discussions-To: comp.sys.amiga.misc
-
- Submitted-by: akk%trantor.informatik.uni-erlangen.de@taurus.cs.nps.navy.mil (Andy Klingler)
- Posting-number: Volume 91, Issue 060
- Archive-name: devices/lightpen-1.1/part01
-
- [ includes uuencoded executable and icon ...tad ]
-
- Every Amiga has a hardware build in to connect a lightpen to it. However
- this feature is rarely used, so I decided to write a software to use a
- lightpen just like you use the mouse. You even can use the mouse and a
- lightpen simultaniously and your applications don`t notice any difference.
- Unfortunately the resolution of the light pen registers is not very high
- (vertical 1 non-interlaced scan line, horizontal 2 low-res pixels), but for
- normal menu selections and gadget pressing it is more than sufficient.
-
- #!/bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 1 (of 1)."
- # Contents: README lp.c lp.info.uu lp.uu makefile
- # Wrapped by tadguy@ab20 on Wed Mar 13 20:25:05 1991
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'README'\"
- else
- echo shar: Extracting \"'README'\" \(4145 characters\)
- sed "s/^X//" >'README' <<'END_OF_FILE'
- X Lightpen-Handler
- X ================
- X
- X (c) Copyright by Andreas Klingler 1988,1991
- X
- XThis program is freely distributable but is NOT public domain. It MAY NOT
- Xbe included in any commercial package, or sold for ANY amount, without
- Xwritten permission from the author. However if may be included on any
- Xfreely distributable package, including packages for which a nominal
- Xcopying fee of no more than $5 is charged, as long as this copyright notice
- Xkeeps intact.
- XThis software is distributed as-is, without any warranty.
- XDon`t blame me for any trouble this gets you into.
- X
- XWhat`s it all about?
- X--------------------
- X
- XEvery Amiga has a hardware build in to connect a lightpen to it. However
- Xthis feature is rarely used, so I decided to write a software to use a
- Xlightpen just like you use the mouse. You even can use the mouse and a
- Xlightpen simultaniously and your applications don`t notice any difference.
- XUnfortunately the resolution of the light pen registers is not very high
- X(vertical 1 non-interlaced scan line, horizontal 2 low-res pixels), but for
- Xnormal menu selections and gadget pressing it is more than sufficient.
- X
- XFiles in the distribution:
- X
- X README - Guess what? You are reading this!
- X lp - Ready to go code
- X lp.info - Yes, you can start it from workbench, too
- X lp.c - SAS/C source
- X makefile- for SAS/C LMK
- X
- X
- XTo use the handler
- X
- Xjust plug in your lightpen in
- X Joyport 1 (the right one) on an A2000
- X Joyport 0 (the front one) on an A1000
- Xand start the program from CLI or Workbench (you don`t need to RUN it). To
- Xremove the handler just run it again. If you start it from the CLI it
- Xgives some output on what`s going on. KS 2.0 should be no problem. As you
- Xmay have noticed there is a difference between the A1000 and the A2000 (and
- Xthe other Amigas?): On the A1000 you have to plug the lightpen in the same
- Xport the mouse goes. To be still able to use the mouse you should first
- Xrun a program which attaches the mouse to the other port.
- X(However buttonsupport is hardwired for port1, but you can change it
- Xto port0 in the source)
- X
- X
- XThe lightpenhandler is done as an InputEvent-Handler. It links into the
- XInputEvent stream just ahead of Intuition. This might not be the best
- Xchoice (normaly an interrupt-handler would be the way to do such things),
- Xbut as I had to generate some InputEvents anyway, and there is a good
- Xexample of an InputEvent-Handler in the RKMs I took this way. We just link
- Xour faked mouse events at the end of each bypassing input event chain. We
- Xcan`t starve here, because at least every 1/10 sec. there is a timer event
- Xto which we can link.
- X
- X
- XOf course for the hardware you are on your own, but I will give a short
- Xdescription how to make a *very* simple lightpen. If there is some
- Xhardware guy outthere who has a good and simple solution and likes to share
- Xit: feel free to mail it to me!
- X
- XOn every Amiga one of the joystick/mouse ports as an input to support
- Xa lightpen. Unfortunately the line used for the beam trigger (6) is the same
- Xwhich is normaly used as the left mousebutton. So to emulate the
- Xmousebuttons I had to use other lines:
- X
- X
- X Pin 3 left penbutton
- X 4 right penbutton
- X 5 pen pressed to screen (not used here)
- X 6 capture beam position
- X 7 +5V (125 mA)
- X 8 GND
- X
- XThe beam counter is triggered by pulling pin 6 to ground.
- XFor a simple start try the following circuit:
- X(I don`t feel responsible for any damage this might do to your computer!)
- X
- X ------------------------------------ 7 (+5V)
- X |
- X | |
- X | | 5k6
- X |
- X |__________________________________ 6 Beam
- X |/
- X |\ BPX 81 (Phototransistor)
- X |
- X |
- X ------------------------------------ 8 GND
- X
- XFor the buttons you need some switches which connect the appropriate pin
- Xto ground when you press them.
- X
- XThis works only for very bright areas on the screen. You might also want to
- Xtry to hack-up one of these cheap C64 lightpens.
- X
- X
- X
- XHave fun with it!
- X
- XAndreas Klingler
- XKoehlerstrasse 12
- X8551 Hemhofen
- XGermany
- XFAX: +49 9195 3730
- XEMail: asklingl@informatik.uni-erlangen.de
- END_OF_FILE
- if test 4145 -ne `wc -c <'README'`; then
- echo shar: \"'README'\" unpacked with wrong size!
- fi
- # end of 'README'
- fi
- if test -f 'lp.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lp.c'\"
- else
- echo shar: Extracting \"'lp.c'\" \(8348 characters\)
- sed "s/^X//" >'lp.c' <<'END_OF_FILE'
- X/*************************************************
- X* Name : lightpen
- X* This code installs a lightpendriver as an
- X* InputEvent-Handler.
- X* Left Mousebutton on Pin 3
- X* Right Mousebutton on Pin 4
- X*
- X* For SAS/C compile with -v
- X* (no stack checking)
- X*
- X* (c) Copyright by Andreas Klingler 1988,1991
- X*
- X* This program is freely distributable but is NOT public domain.
- X* It MAY NOT be included in any commercial package, or sold for
- X* ANY amount, without written permission from the author.
- X* However if may be included on any freely distributable package,
- X* including packages for which a nominal copying fee of no more than
- X* $5 is charged, as long as this copyright notice keeps intact.
- X* This software is distributed as-is, without any warranty.
- X*
- X* created 31.10.88 akk
- X* cleanup 27.01.91 akk
- X*************************************************/
- X#include <exec/types.h>
- X#include "intuition/intuition.h"
- X#include <exec/ports.h>
- X#include <exec/io.h>
- X#include <exec/memory.h>
- X#include <devices/input.h>
- X#include <exec/devices.h>
- X#include <devices/inputevent.h>
- X#include "stdio.h"
- X#include "stdlib.h"
- X#include "graphics/gfxbase.h"
- X#include "graphics/view.h"
- X#include "proto/dos.h"
- X#include "proto/exec.h"
- X#include "proto/intuition.h"
- X#include "proto/graphics.h"
- X#include "hardware/custom.h"
- X
- X/***************** CONSTANTS ********************/
- X#define LP_ENABLE 0x08
- X#define XCOMPENSATE 42 /* This is to compensate some timing problems.
- X You might need to change this. Uh! Again the
- X answer is 42! What was the question!? */
- X
- X#define BANNER "\x9B\x30;33mLightpenhandler Version 1.1\x9B\x30m (c) by Andreas Klingler 1988,1991\n"
- X#define ACTIVATED " Handler installed\n"
- X#define TERMINATING " Handler removed\n"
- X#define PORTNAME "lightpen_AKK.port"
- X
- X/****************** GLOBAL VARIABLES ************/
- Xextern struct Custom __far custom;
- X
- Xstruct MsgPort *inputDevPort;
- Xstruct IOStdReq *inputRequestBlock;
- Xstruct Interrupt handlerStuff;
- Xstruct OURMSG {
- X struct Message msgpart;
- X short dummy;
- X } msg;
- X
- Xstruct LpInfo { short *ViewX, *ViewY; } handlerdata;
- X
- X/* Prototypes for functions defined in lp.c */
- Xstruct InputEvent * __regargs __saveds myhandler(struct InputEvent *,
- X struct LpInfo *);
- Xvoid main(void);
- Xvoid chkabort(void);
- X
- X
- X/* Declarations for CBACK */
- Xextern BPTR _Backstdout; /* standard output when run in background */
- Xlong _BackGroundIO = 1; /* Flag to tell it we want to do I/O */
- Xlong _stack = 4000; /* Amount of stack space our task needs */
- Xchar *_procname = "Lightpenhandler"; /* The name of the task to create */
- Xlong _priority = 20; /* The priority to run us at */
- X
- X/******************* Here goes the Handler ****************/
- Xstruct InputEvent *
- X__regargs __saveds myhandler(ev, mydata)
- X struct InputEvent *ev; /* and a pointer to a list of events */
- X struct LpInfo *mydata; /* system will pass me a pointer to my
- X own data space. */
- X
- X{
- X static struct InputEvent lpev;
- X struct InputEvent *retwert;
- X BOOL lpen_invalid = FALSE,button_pressed = FALSE;
- X static BOOL left_down,right_down;
- X ULONG pos;
- X static ULONG *lpen = (ULONG *)&custom.vposr;
- X register short x,y;
- X
- X pos = *lpen; /* read pen position (we read two
- X registers here: VPOSR,VHPOSR) */
- X
- X Forbid();
- X if ((pos != *lpen) || /* Test, if Lpen has been
- X triggered since VBLANK */
- X ((pos & 0x1ffff) > 0x12a00)) { retwert=ev; lpen_invalid=TRUE; }
- X else retwert = &lpev;
- X
- X /* Translate in HIRES INLACE coordinates (depending of position of
- X the View). That`s what mouse coordinates are in.
- X Since we have only 8 bits for the horizonal position it gets
- X a little bit tricky (there are 640 pixel in one line in hires!) */
- X x = (short)((pos <<1) & 0x1ff);
- X if (x < 100) x += 454;
- X y = ((short) (pos >> 8) &0x1ff) - *(mydata->ViewY);
- X x -= (*(mydata->ViewX) + XCOMPENSATE);
- X
- X lpev.ie_NextEvent = ev; /* link lpen ahead of event stream */
- X lpev.ie_Class = IECLASS_POINTERPOS;
- X lpev.ie_Code = IECODE_NOBUTTON;
- X lpev.ie_Qualifier = 0;
- X lpev.ie_TimeStamp.tv_secs = 0;
- X lpev.ie_TimeStamp.tv_micro = 0;
- X lpev.ie_X = x << 1;
- X lpev.ie_Y = y << 1;
- X
- X /* Button on lightpen pressed ? */
- X if (right_down) {
- X if (!(custom.joy1dat & 1)) { lpev.ie_Code = IECODE_RBUTTON |
- X IECODE_UP_PREFIX;
- X right_down = FALSE;
- X button_pressed = TRUE;
- X }
- X }
- X else if (custom.joy1dat & 1) { lpev.ie_Code = IECODE_RBUTTON;
- X right_down = TRUE;
- X button_pressed = TRUE;
- X }
- X if (left_down) {
- X if (!(custom.joy1dat & 0x100)){
- X lpev.ie_Code = IECODE_LBUTTON |
- X IECODE_UP_PREFIX;
- X left_down = FALSE;
- X button_pressed = TRUE;
- X }
- X }
- X else if (custom.joy1dat & 0x100) {
- X lpev.ie_Code = IECODE_LBUTTON;
- X left_down = TRUE;
- X button_pressed = TRUE;
- X }
- X
- X /* Append positiondata only if it is valid */
- X if (button_pressed && lpen_invalid) {
- X lpev.ie_Class = IECLASS_RAWMOUSE;
- X lpev.ie_Qualifier = IEQUALIFIER_RELATIVEMOUSE;
- X lpev.ie_X = lpev.ie_Y = 0;
- X retwert = &lpev;
- X }
- X Permit();
- X return (retwert);
- X}
- X
- X
- Xvoid main()
- X{
- X struct MsgPort *port;
- X SHORT error;
- X
- X
- X if (_Backstdout) Write(_Backstdout, BANNER, sizeof(BANNER));
- X
- X /* now see if we are allready installed */
- X if (!(port = FindPort(PORTNAME))) {
- X /* if not, install ourself : */
- X if ((port = CreatePort(PORTNAME,0)) == NULL) _exit (19);
- X
- X GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",0);
- X if (!GfxBase) _exit(20);
- X
- X IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",0);
- X if (!IntuitionBase) _exit(21);
- X
- X /* Tell the OS about the lightpen and enable the hardware */
- X GfxBase->system_bplcon0 |= LP_ENABLE;
- X RemakeDisplay();
- X
- X /* Determine position of the View. Attention: if someone pokes
- X around with Preferences while we are running, we can`t handle
- X this! */
- X handlerdata.ViewX = (short *)&(GfxBase->ActiView->DxOffset);
- X handlerdata.ViewY = (short *)&(GfxBase->ActiView->DyOffset);
- X
- X inputDevPort = CreatePort(0,0); /* for input device */
- X if(inputDevPort == NULL) _exit(1); /* error during createport */
- X inputRequestBlock=CreateStdIO(inputDevPort);
- X if(inputRequestBlock == 0) { DeletePort(inputDevPort); _exit(2); }
- X /* error during createstdio */
- X
- X
- X handlerStuff.is_Data = (APTR)&handlerdata;
- X /* address of its data area */
- X handlerStuff.is_Code = (void *)myhandler;
- X /* address of entry point to handler */
- X handlerStuff.is_Node.ln_Pri = 51;
- X /* set the priority one step higher than
- X * Intuition, so that our handler enters
- X * the chain ahead of Intuition.
- X */
- X error = OpenDevice("input.device",0,(struct IORequest *)inputRequestBlock,0);
- X if(error) _exit(23);
- X
- X inputRequestBlock->io_Command = IND_ADDHANDLER;
- X inputRequestBlock->io_Data = (APTR)&handlerStuff;
- X
- X DoIO((struct IORequest *)inputRequestBlock); /* Activate the Handler */
- X
- X /* The Handler is running. Close everything we don`t need
- X anymore and wait until it is time to uninstall the handler.
- X All the dirty work is done by the handler */
- X
- X CloseLibrary((struct Library *)IntuitionBase);
- X CloseLibrary((struct Library *)GfxBase);
- X
- X if (_Backstdout) { Write(_Backstdout,ACTIVATED, sizeof(ACTIVATED));
- X Close(_Backstdout);
- X }
- X WaitPort(port); /* Wait until we get message */
- X GetMsg(port); /* to exit, then remove it */
- X /* and get out */
- X
- X inputRequestBlock->io_Command = IND_REMHANDLER;
- X inputRequestBlock->io_Data = (APTR)&handlerStuff;
- X DoIO((struct IORequest *)inputRequestBlock);
- X
- X /* close the input device */
- X CloseDevice((struct IORequest *)inputRequestBlock);
- X
- X /* delete the IO request */
- X DeleteStdIO(inputRequestBlock);
- X
- X /* free other system stuff */
- X DeletePort(inputDevPort);
- X DeletePort(port);
- X } /* this is the end of the BIG-IF (and of the program */
- X
- X else /* in this case the handler is already installed, so we
- X send a message to it to make it deinstall itself */
- X {
- X msg.msgpart.mn_Length = sizeof(struct OURMSG);
- X PutMsg(port,(struct Message *)&msg);
- X if (_Backstdout) { Write(_Backstdout, TERMINATING, sizeof(TERMINATING));
- X Close(_Backstdout);
- X }
- X }
- X} /* end of main */
- X
- Xvoid MemCleanup() {} /* We don`t want this out of lc.lib */
- X
- Xvoid chkabort() {}
- END_OF_FILE
- if test 8348 -ne `wc -c <'lp.c'`; then
- echo shar: \"'lp.c'\" unpacked with wrong size!
- fi
- # end of 'lp.c'
- fi
- if test -f 'lp.info.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lp.info.uu'\"
- else
- echo shar: Extracting \"'lp.info.uu'\" \(392 characters\)
- sed "s/^X//" >'lp.info.uu' <<'END_OF_FILE'
- Xbegin 644 lp.info
- XMXQ```0```````````"0`#@`$``,``0#`UO@`````````````````````````\
- XM`````P```````````````4X````"```````````````````````D``T``@`!(
- XM<)`#``````````````````!X``````"&```````"```````.```````/@```@
- XM````@``````0@``````>@``0```?@```````8```````,```````$```````]
- XM``````````````\``````'\``````?X`````!_@`````?X`````#_``````/9
- X=P``````/````````````````````````````````/
- X``
- Xend
- Xsize 254
- END_OF_FILE
- if test 392 -ne `wc -c <'lp.info.uu'`; then
- echo shar: \"'lp.info.uu'\" unpacked with wrong size!
- fi
- # end of 'lp.info.uu'
- fi
- if test -f 'lp.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lp.uu'\"
- else
- echo shar: Extracting \"'lp.uu'\" \(4227 characters\)
- sed "s/^X//" >'lp.uu' <<'END_OF_FILE'
- Xbegin 644 lp
- XM```#\P`````````#``````````(```#-````X0```7T```/I````S4CG?OY+6
- XM[P`T)$@D`$GY`````"QX``0I3@!:*4\`8D*L`%Y'^0```>!R`"`\````:6`".
- XM)L%1R/_\)FX!%'``(CP``#``3J[^SBEK`)@`5DJK`*QG``%080`"J"(L`%8L@
- XM;`.`3J[_H"E``%8@:P"LT<C1R")H`!#3R=/)(`)R`!(9*`DF`=*!T(%:@.6(&
- XMT*P`%"E``!1![```+'@`!$ZN_R(B0"\`(FD`$$?I`/(@1"`#8`(6V%'(__P6.
- XM_``@($H@`F`"%MA1R/_\0ALI2P!V($0@`V`"%MA1R/_\0A-%Z0!P*4H`&D7Z]
- XM_Q8B_````#PF">2+(M)"DD7Z`38@/````.D2VE'(__Q*K`"(9P``&D'L`(8BD
- XM""0\```#[2QL`X!.KO_B*4``<BQX``1.KO]\(BP`H"0L`*0H+`",+&P#@$ZNC
- XM_W8F3DJ`9@``("1?(FH`$"(L`%9.KO^F($HL>``$3J[_''!H8```)B1`(E]%.
- XMZO^D0>H`2D'H``0@*``$(4D`!"*((T``!"!`((EP`"QX``1.KO]V(DLL>``$A
- XM3J[^8DS??WY.=2EK`#H`)@:L````@``F80`!3$7Z`.PI2@`:80`!6"E``%XOI
- XM`"1`("H`)&<2+&P#@"!`(B@``"E!`%9.KO^"(BH`(&<:)#P```/M3J[_XBE`0
- XM`&YG"N6(($`G:``(`*0@;`!>+PA(;``B(&@`)"EH``0`=DZZ`11.N0```VAP4
- XM`&```(`````\`````"`/2.=^_BI`+'@`!$GY`````"E/`&)A``"ZD\F3R4ZNS
- XM_MHF0"EK`#H`)@:L````@``F(&L`@-'(T<@B:``,T\G3R2E1`!XA40`,(BP`Y
- XM5BQL`X!.KO^"2'H`DDZY```#9$ZY```#:%A/+&P#@"(L`%9.KO^F<``@+`!.S
- XM9P0@0$Z03KD```->3KD```-F2JP`7F<>(BP`;F<(+&P#@$ZN_]PL>``$3J[_:
- XM?")L`%Y.KOZ&)FP`8B(L`!XL;`.`3J[_9").+'@`!$ZN_F(N2TS??WY.=4/L)
- XM`'IP`$ZN_=@I0`.`9P``!$YU<&1@C$'K`%Q.KOZ`0>L`7$ZN_HQ.=0``3OD`O
- XM``-D<&$```/L`````P````$````D```"/`````X````&`````@```K8```*P-
- XM```"D````AP```**```#+@````````/R```#Z@```'@`````````````````'
- XM```!`````0```/).^0``````````````````````````````````````````[
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````&1O<RYL:6)R87)Y`"H``````0``#Z!,:6=H'
- XM='!E;FAA;F1L97(`````D````!0`W_`$FS`[,S-M3&EG:'1P96YH86YD;&5R^
- XM(%9E<G-I;VX@,2XQFS!M(*D@8GD@06YD<F5A<R!+;&EN9VQE<B`Q.3@X+#$YX
- XM.3$*`)LP.S,S;4QI9VAT<&5N:&%N9&QE<B!697)S:6]N(#$N,9LP;2"I(&)Y8
- XM($%N9')E87,@2VQI;F=L97(@,3DX."PQ.3DQ"@!L:6=H='!E;E]!2TLN<&]R*
- XM=`!L:6=H='!E;E]!2TLN<&]R=`!G<F%P:&EC<RYL:6)R87)Y``!I;G1U:71IR
- XM;VXN;&EB<F%R>0!I;G!U="YD979I8V4``"!(86YD;&5R(&EN<W1A;&QE9`H`6
- XM($AA;F1L97(@:6YS=&%L;&5D"@`@2&%N9&QE<B!R96UO=F5D"@`@2&%N9&QEN
- XM<B!R96UO=F5D"@```````"@```/L`````0````$```"@`````````_(```/IH
- XM```!?4Y5__!(YS\Z2?D`````)D@D27X`?``@;`"H*U#_]"QX``1.KO]\("W_<
- XM]"!L`*@B$+*`9A`B/``!___"@`R!``$J`&,(*TO__'X!8`A![`'@*TC__"(`Z
- XMTH$"@0```?\J`7)DND%L!`9%`<;@B`)``?\@:@`$D%`H`"!2<"K04)I`*4L!/
- XMX!E\``0!Y#E\`/\!YG``.4`!Z'(`*4$![BE!`?(D!=1".4(!ZB0$U$(Y0@'L^
- XM2FP!^&<:-#D`W_`,"`(``&8H.7P`Z0'F?`$Y0`'X8!HT.0#?\`P(`@``9PXY^
- XM?`!I`>9V`2P#.4,!^$IL`?9G%`@"``AF(CE\`.@!YGP!.4`!]F`4"`(`"&<.5
- XM.7P`:`'F=`$L`CE"`?9*1F<@2D=G'!E\``(!Y#E\@``!Z#E``>PY0`'J0>P!6
- XMX"M(__Q.KO]V("W__$S?7/Q.74YU2.<Q,DJL`')G%"(L`')![`"L)`AV1BQL&
- XM`X!.KO_00^P!."QX``1.KOYZ)D`@"V8``:I"ITAL`4I.N@-^4$\F0"`+9@I(-
- XM>``33KH#_EA/0^P!7'``+'@`!$ZN_=@I0`-\2H!F"DAX`!1.N@/>6$]#[`%N4
- XM<``L>``$3J[]V"E``WA*@&8*2'@`%4ZZ`[Y83R!L`WPP*`"D`$``""!L`WPQ7
- XM0`"D+&P#>$ZN_H`B;`-\(&D`(D7H``XI2@(N(&D`(D7H``PI2@(R0J="ITZZL
- XM`NQ03RE``?IF"DAX``%.N@-L6$\O+`'Z3KH"EEA/*4`!_DJ`9A(O+`'Z3KH"G
- XM&$AX``).N@-(4$]![`(N*4@"$$'Z_:8I2`(4&7P`,P(+0>P!@'``(FP!_B(`S
- XM+'@`!$ZN_D0N`$I'9PI(>``73KH##EA/(&P!_C%\``D`'$'L`@(B;`'^(T@`S
- XM*"QX``1.KOXX(FP#>$ZN_F(B;`-\3J[^8DJL`')G'"(L`')![`&.)`AV%"QL%
- XM`X!.KO_0(BP`<DZN_]P@2RQX``1.KOZ`($M.KOZ,(&P!_C%\``H`'$'L`@(B4
- XM;`'^(T@`*$ZN_C@B;`'^3J[^/B\L`?Y.N@$>+JP!^DZZ`4(NBTZZ`3Q83V`R-
- XM.7P`%@(J($M#[`(83J[^DDJL`')G'"(L`')![`&V)`AV$BQL`X!.KO_0(BP`N
- XM<DZN_]Q,WTR,3G5.=4YU``!.=4YU3E7_=$CG`3`F;P"@?@!P(+Z`;```@A`3C
- XM<B"P`6<,<@FP`6<&<@JP`68$4HM@Z$H39V0@!^6`4H=![?]TT<`D2'`BL!-FQ
- XM)E*+)(M*$V<*<"*P$V<$4HM@\DH39@Q(>``!3KH`6EA/8*9"&V"B)(M*$V<8X
- XM$!-R(+`!9Q!R";`!9PIR"K`!9P12BV#D2A-F`F`&0AM@`/]Z2H=G!D'M_W1@3
- XM!"!L`%XO""\'3KK].D*73KH`#$SM#(#_:$Y=3G5.^0```!@```````!(YP`2!
- XM)F\`#!=\`/\`"#!\__\G2``4)T@`&")+<#`L>``$3J[_+DS?2`!.=4CG`!(FJ
- XM;P`,2JL`"F<*(DLL>``$3J[^F!=\`/\`"'#_)T``%'``$"L`#RQX``1.KOZPB
- XM(DMP(DZN_RY,WT@`3G4O!RXO``A*K`!29P1.NOZV(@<L;`.`3J[_W'``+A]..
- XM=0```````````````$CG`#(F;P`0(`MF!'``8"9P,"(\``$``2QX``1.KO\ZC
- XM)$`@"F<.%7P`!0`(0BH`"25+``X@"DS?3`!.=4CG`S(F;P`8+B\`''#_+'@`5
- XM!$ZN_K8L``P&`/]F!'``8&9P(B(\``$``4ZN_SHD0"`*9@IP`!`&3J[^L&!(.
- XM)4L`"B`'%4``"15\``0`"$(J``X51@`/D\E.KO[:)4``$"`+9P@B2DZN_IY@C
- XM&D'J`!@E2``40>H`%"5(`!Q"J@`8%7P``@`@(`I,WTS`3G4``$CG!P`N+P`0D
- XM("P!W%.`+`!*1FLP(`9(P.>`0>P"."HP"`!*!6<:"`4`!&84(`9(P.>`0>P"0
- XM."\P"`1.NO[,6$]31F#,+P=.NOY(6$],WP#@3G4`````````````````````:
- X:`^P````"`````0``!"8````*`````````_+@[
- X``
- Xend
- Xsize 2996
- END_OF_FILE
- if test 4227 -ne `wc -c <'lp.uu'`; then
- echo shar: \"'lp.uu'\" unpacked with wrong size!
- fi
- # end of 'lp.uu'
- fi
- if test -f 'makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'makefile'\"
- else
- echo shar: Extracting \"'makefile'\" \(269 characters\)
- sed "s/^X//" >'makefile' <<'END_OF_FILE'
- X# Makefile for the Lightpen-Handler
- X# (SAS/C and LMK)
- X
- XCC = lc
- XFLAGS = -caf -v
- X
- Xlp: lp.o
- X blink <with <
- X DEFINE __main=__tinymain
- X FROM LIB:cback.o+lp.o
- X TO lp
- X LIBRARY LIB:lc.lib+LIB:amiga.lib
- X SMALLCODE
- X SMALLDATA
- X NODEBUG
- X <
- X
- Xlp.o: lp.c
- X $(CC) $(FLAGS) lp.c
- END_OF_FILE
- if test 269 -ne `wc -c <'makefile'`; then
- echo shar: \"'makefile'\" unpacked with wrong size!
- fi
- # end of 'makefile'
- fi
- echo shar: End of archive 1 \(of 1\).
- cp /dev/null ark1isdone
- MISSING=""
- for I in 1 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have the archive.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
- Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
- Mail comments to the moderator at <amiga-request@uunet.uu.net>.
- Post requests for sources, and general discussion to comp.sys.amiga.misc.
-